package org.wtframework.platform.server.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.openredhead.springx.core.server.service.Exceptions;
import org.openredhead.springx.core.server.service.FilePaths;

import com.google.common.io.Files;
public class WebFileUtil {

    
    /**
     * 删除文件方法
     * @param filePath 文件所有路径
     * @return
     */
    public static Boolean deleteFile(String filePath){

		try {
			File dbFile = new File(FilePath.getSystemRootPath() + "/" + filePath);
			if (dbFile.exists()) {
				dbFile.delete();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		
		return true;
	}
    
    /**
     * 复制文件方法用于ueditor
     * @param oldPath
     * @param newPath
     * @return
     */
    public static Boolean copyFileForUeditor(String oldPath, String newPath){
    	
		try {
			File saveFile = new File(FilePath.getSystemRootPath() + newPath);
			File oldFile = new File(FilePaths.getSystemRootPath() + oldPath);
			FileUtils.copyFile(oldFile, saveFile);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
    }
    
    /**
     * 复制文件方法
     * @param oldPath 临时文件路径
     * @param floder  保存的文件夹
     * @return
     */
    public static String copyFile(String oldPath, String floder){
    	
    	String fileFloder = "";
    	String fileName = "";
		try {
			File oldFile = new File(FilePath.getSystemRootPath() + oldPath);
			SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd" );
			fileFloder = "/files/" + floder + "/" + sdf.format(new Date()) + "/";
			String filePath = FilePath.getSystemRootPath() + fileFloder;
			fileName = oldFile.getName();
			createFold(new File(filePath));
			File saveFile = new File(filePath + fileName);
			FileUtils.copyFile(oldFile, saveFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return fileFloder+fileName;
    }
    
    
    /**
     * 创建文件夹
     * @param dFile
     */
    public static void createFold(File dFile) {
		if (!dFile.exists()) dFile.mkdirs();
	}
    
   /**
    * 
    * <B>方法描述：</B>（读取邮件模板 ） <br/>
    *
    * <B>作者：	 </B> 黄杰帆 <br/>
    * <B>创建日期：</B> 2014年6月14日 上午10:44:00 
    * @param templateName
    * @return
    */
    public static String readMailTemplate(String templateName) {
    	
    	String filepath = FilePaths.getSystemRootPath() + File.separator + "WEB-INF" + File.separator + "files" + File.separator + "template" + File.separator + "mail" + File.separator + templateName;
    	
    	return readFile(filepath);
    }
    
    /**
     * 
     * <B>方法描述：</B>（读取文件文本内容 ） <br/>
     *
     * <B>作者：	 </B> 黄杰帆 <br/>
     * <B>创建日期：</B> 2014年6月14日 上午10:43:41 
     * @param filepath
     * @return
     */
    public static String readFile(String filepath) {
    	
    	String content = "";
    	
    	File file = new File(filepath);
    	
    	if (!file.exists()) return content;
    	
    	try {
			
    		List<String> lines = Files.readLines(file, Charset.forName("UTF-8"));
    		for (String line : lines)
    			content = content + line + "\n";
		} catch (Exception e) {
			e.printStackTrace();
			Exceptions.logException(WebFileUtil.class, "readFile", e);
		}
    	
    	return content;
    }
    
   /***
    * 
    * <B>方法描述：</B>（强制下载） <br/>
    *
    * <B>作者：	 </B> 黄杰帆 <br/>
    * <B>创建日期：</B> 2014年6月14日 上午10:44:21 
    * @param response
    * @param url
    * @param fileName
    */
    public static void downloadFile(HttpServletResponse response, String url, String fileName){
    	
    	if(url.toLowerCase().contains("web-inf")){
    		return;
    	}

    	String root = FilePath.getSystemRootPath();
    	
    	fileName = fileName + url.substring(url.lastIndexOf("."));
    	try {
	    	fileName = new String(fileName.getBytes(), "iso8859-1");//解决中文 文件名问题  
	    	response.setContentType("application/octet-stream"); 
	    	response.addHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); 
		 
			OutputStream os = response.getOutputStream(); 
			FileInputStream fis = new FileInputStream(new File(root + url)); 

			byte[] b = new byte[1024]; 
			int i = 0; 
			
			while ( (i = fis.read(b)) > 0 ) { 
				os.write(b, 0, i); 
			} 

			fis.close(); 
			os.flush(); 
			os.close(); 
		} catch ( Exception e ) { 
		} 
    	
    }
}
